import { defineStore, createPinia } from "pinia";
import { GlobalState, ThemeConfigProps } from "./interface";
import { DEFAULT_PRIMARY, SYSTEM_ID } from "@/config/config";
import piniaPersistConfig from "@/config/piniaPersist";
import piniaPluginPersistedstate from "pinia-plugin-persistedstate";
import logo from "@/assets/images/logo.png";
// defineStore 调用后返回一个函数，调用该函数获得 Store 实体
export const GlobalStore = defineStore({
	// id: 必须的，在所有 Store 中唯一
	id: "GlobalState",
	// state: 返回对象的函数
	state: (): GlobalState => ({
		systemName: "",
		expire: "",
		currentVersion: "",
		systemid: SYSTEM_ID,
		token: "",
		setting: {
			//记住用户名
			rememberUser: false,
			//记录的用户名
			username: ""
		},
		// userInfo
		userInfo: {
			userId: "",
			username: "",
			ssex: "",
			avatar: "",
			status: "",
			lastLoginTime: "",
			deptName: "",
			deptIds: "",
			validDate: ""
		},

		// element组件大小
		assemblySize: "default", //small/default(medium)/large
		// language
		language: "",
		// themeConfig
		themeConfig: {
			logo: logo,
			// 布局切换 ==>  纵向：vertical | 经典：classic | 横向：transverse | 分栏：columns | 三列： three
			layout: "three",
			// 默认 primary 主题颜色
			primary: DEFAULT_PRIMARY,
			// 深色模式
			isDark: false,
			// 灰色模式
			isGrey: false,
			// 色弱模式
			isWeak: false,
			// 折叠菜单
			isCollapse: false,
			// 面包屑导航
			breadcrumb: true,
			// 面包屑导航图标
			breadcrumbIcon: false,
			// 标签页
			tabs: false,
			// 标签页图标
			tabsIcon: false,
			// 页脚
			footer: false,
			// 当前页面是否全屏
			maximize: false
		}
	}),
	getters: {},
	actions: {
		setSystemName(systemName: string) {
			this.systemName = systemName || import.meta.env.VITE_GLOB_APP_TITLE;
		},
		setLogo(logoUrl: string) {
			this.themeConfig.logo = logoUrl || logo;
		},
		setCurrentVersion(currentVersion: string) {
			this.currentVersion = currentVersion;
		},
		setExpire(expire: string) {
			this.expire = expire;
		},
		// setToken
		setToken(token: string) {
			this.token = token;
		},
		rememberUser(flag: boolean) {
			this.setting.rememberUser = flag;
		},
		// setUserInfo
		setUserInfo(userInfo: User.UserInfo) {
			this.userInfo = userInfo;
		},
		// setAssemblySizeSize
		setAssemblySizeSize(assemblySize: string) {
			this.assemblySize = assemblySize ? assemblySize : "default";
		},
		// updateLanguage
		updateLanguage(language: string) {
			this.language = language;
		},
		// setThemeConfig
		setThemeConfig(themeConfig: ThemeConfigProps) {
			this.themeConfig = themeConfig;
		}
	},
	persist: piniaPersistConfig("GlobalState")
});

// piniaPersist(持久化)
const pinia = createPinia();
pinia.use(piniaPluginPersistedstate);

export default pinia;
